/*
 * @lc app=leetcode.cn id=645 lang=cpp
 *
 * [645] 错误的集合
 */

// #include <iostream>
// #include <vector>
// #include <set>
// using namespace std;


// @lc code=start
class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        // 设置数组及保存结果的变量
        set<int> data;
        vector<int> result;
        int lost = 0;
        int duplicate = 0;

        // 初始化 1-n 的数组
        for (int i = 1; i <= nums.size(); i++) {
            data.insert(i);
        }

        // 遍历给定的数组，在集合中删除原有的数据
        for (int num:nums) {
            int count_before = data.size();
            data.erase(num);
            int count_after = data.size();
            if (count_before == count_after) {
                duplicate = num;
            }
        }
        // 集合中剩余的元素及丢失的数据
        lost = *(data.begin());

        // 返回包含 重复的数字 和 丢失的数据
        result.push_back(duplicate);
        result.push_back(lost);
        return result;
    }
};
// @lc code=end

